package core;

import java.util.HashMap;

public class ClasseIdentificador extends ClasseSimbolo
{
	public ClasseIdentificador(AnalisadorLexico analisador)
	{
		super(analisador);
	}

	public boolean test(String simbolo)
	{
		String padrao = "^[a-zA-Z]+(\\.[0-9a-zA-z]|[0-9a-zA-z])*$";
		return simbolo.matches(padrao);
	}

	public void ler(String ultimoSimbolo)
	{
		AnalisadorLexico analisador = getAnalisador();
		try
		{
			String tmp = ultimoSimbolo + analisador.readChar();
			while (test(tmp) || tmp.charAt(tmp.length() - 1) == '.')
			{
				ultimoSimbolo = tmp;
				tmp += analisador.readChar();
			}
		} catch (Exception e)
		{
			analisador.setFinal();
		}

		analisador.recuarLeitura();

		if (ultimoSimbolo.charAt(ultimoSimbolo.length() - 1) == '.')
		{
			ultimoSimbolo = ultimoSimbolo.substring(0, ultimoSimbolo.length() - 1);
			analisador.recuarLeitura();
		}

		HashMap<String, Integer> opLogico = new HashMap();
		
		opLogico.put("and", Simbolo.LOGICO);
		opLogico.put("or", Simbolo.LOGICO);
		opLogico.put("not", Simbolo.LOGICO);

		HashMap<String, Integer> palavraReservadas= new HashMap();
		
		palavraReservadas.put("sel", Simbolo.RESERVADA);
		palavraReservadas.put("proj", Simbolo.RESERVADA);
		palavraReservadas.put("prod", Simbolo.RESERVADA);
		palavraReservadas.put("uni", Simbolo.RESERVADA);
		palavraReservadas.put("dif", Simbolo.RESERVADA);
		
		
		
		if(opLogico.containsKey(ultimoSimbolo)){
			
			analisador.addSimbolo(new Simbolo(ultimoSimbolo, Simbolo.LOGICO));
			
		}else if(palavraReservadas.containsKey(ultimoSimbolo)){
		
			analisador.addSimbolo(new Simbolo(ultimoSimbolo, Simbolo.RESERVADA));	
		}else{
		
		analisador.addSimbolo(new Simbolo(ultimoSimbolo, Simbolo.IDENTIFICADOR));
		
		}
	}
}